15.2 case 语句

文章目录
  1. 1. 排列顺序
    1. 1.1. 如果所有情况的重要性都相同
    2. 1.2. 若有少数正常情况和多数的异常情况
    3. 1.3. 按执行频率排列
  2. 2. 使用 case 语句的提示
    1. 2.1. Keep the actions of each case simple 让每种情况的操作代码保持简单
    2. 2.2. Don’t make up phony variables to be able to use the case statement 不要为了使用 case 语句而刻意制造虚假的变量
    3. 2.3. Use the default clause only to detect legitimate defaults 把 default 子句用于真正的默认情况
    4. 2.4. Use the default clause to detect errors 使用 default 子句检测错误
    5. 2.5. In C++ and Java, avoid dropping through the end of a case statement 避免代码执行越过这个 case 子句的末尾(即避免执行到下一 case 的语句)
    6. 2.6. In C++, clearly and unmistakably identify flow-throughs at the end of a case statement
  3. 3. 其他

很多脚本语言根本不支持 case 语句,C++、Java 这些对 case 的支持也有限

排列顺序

如果所有情况的重要性都相同

假如所有情况的重要性都相同,按字母顺序或数字顺序可以提高可读性

若有少数正常情况和多数的异常情况

将正常情况放在前面,并用注释说明这些是正常情况,其他的是非正常情况

按执行频率排列

上面那条跟这个是相符的,把最经常执行的情况放在前面。这样可以提高可读性和检索的速度

使用 case 语句的提示

Keep the actions of each case simple 让每种情况的操作代码保持简单

情况处理代码要简短,这样可以使得 case 语句的结构更加清晰。如果某种情况执行的操作非常复杂,就将它们写成一个子程序来调用

Don’t make up phony variables to be able to use the case statement 不要为了使用 case 语句而刻意制造虚假的变量

C 系语言对 case 支持有限,不能直接匹配字符串(如 C++中case只可以匹配a constant expression of the same type as the type of condition after conversions and integral promotions

toExemplify-book

Use the default clause only to detect legitimate defaults 把 default 子句用于真正的默认情况

如果在你考虑到的情况中,将最后一种列为 other 的话,(即将 default 理解为 the last case),这是很不明智的,这意味着你默认你的 cases 里包含了所有情况。万一你是错的呢?当潜在的错误发生时,你就不能用 default 子句来检测了

default = other cases unexpected

这样,当发现一种新的情况时,修改起来也很容易,只需要增加这种情况就可以了

Use the default clause to detect errors 使用 default 子句检测错误

类似上一条所述

In C++ and Java, avoid dropping through the end of a case statement 避免代码执行越过这个 case 子句的末尾(即避免执行到下一 case 的语句)

这个建议是说:

  • 注意使用 break
  • 不要混用不同的控制结构
    • toExemplify-book

In C++, clearly and unmistakably identify flow-throughs at the end of a case statement

即:如果你需要执行完一个 case 后又接着执行另一个 case,那么要在相应位置给出明确的注释

不过一般来说,极力避免这样的代码

toNote

其他

Why Doesn’t Python Have Switch/Case?